Как известно наличие микроразметки напрямую не влияет на ранжирование сайта в поисковых системах, однако её вклад пусть и косвенный все же прослеживается. Поэтому почему бы нам не воспользоваться всеми возможными способами для того чтобы получить шанс повысить позиции сайта. И начнем мы, пожалуй, с микроразметки.
Что такое микроразметка, и из каких наиболее популярных и распространенных словарей она состоит, мы говорили в предыдущей статье. На сей раз разговор пойдет исключительно о микроразметке Schema.org и о том, как её внедрить в материалы Joomla 3.
Большинство сайтов на Joomla 3 есть не что иное, как обычный блог который содержит материалы (статьи). Материалы могут быть выведены как отдельно, так и в виде блога категории. Соответственно структура микроразметки для каждой конкретной ситуации будет отличаться. В данной статье мы подробно разберем, как использовать микроразметку Schema.org для статей (материалов) Joomla 3.
Прежде чем начать вносить изменения в код шаблона статьи, давайте воспользуемся одним из сервисов для проверки микроразметки на сайте. Это может быть валидатор микроразметки от Яндекса или инструмент проверки структурированных данных от Google.
Я остановлю свой выбор на валидаторе от Гугла, просто потому что мне он кажется более удобным, а позднее перейдем и к Яндексу. Первым делом копируем адрес страницы, которую хотим проверить вставляем его в соответствующее поле валидатора и жмем кнопку «Запустить тест»:
После завершения теста система покажет наличие (или отсутствие) микроразметки, а так же обнаруженные в процессе ошибки. В моем случае Гугл обнаружил микроразметку для так называемой сущности BreadcrumbList (хлебные крошки) и Article (статья). И если с хлебными крошками проблем не оказалось, то в микроразметки статьи нашлось три ошибки и два предупреждения:
Прежде чем продолжить разбор ошибок хочу обратить Ваше внимание на то, что в Joomla 3 разработчиками изначально уже предусмотрено использование микроразметки Schema.org об этом свидетельствует вышеупомянутый скриншот. Однако в связи с периодическим внесением изменений и дополнений в словарь Schema.org рано или поздно будут возникать некоторые ошибки в семантической разметке страниц.
Не стоит бояться наличия ошибок в микроразметке, ведь их можно с легкостью исправить самостоятельно, было бы желание. Этим мы сейчас и займемся. Для начала давайте определимся, на какие именно ошибки указывает нам Гугл. В моем случае все оказалось достаточно банально, не указано значение для поля автор (author), дата публикации (datePublished), модификации (dateModified) и так далее:
Почему у меня появились подобные ошибки? Все просто, я специально не выводил эти данные, просто не люблю, когда у каждой статьи стоит одинаковое значение для поля автор. По поводу даты публикации и модификации, тут все еще проще, я выводил эти данные самостоятельно по средствам кода и забыл указать соответствующие атрибуты для разметки.
Ошибки в микроразметке обнаружены, отлично, теперь можно приступить к их исправлению. Первым делом я исправлю значения дат публикации и модификации материала. Для этого открываем файл /templates/имя_шаблона/html/com_content/article/default.php отвечающий за шаблон материала, если по указанному пути вы не нашли данный файл тогда вам стоит создать соответствующее переопределение или скопировать его из папки /components/com_content/views/article/tmpl.
Поля datePublished и dateModified
Так как я вывожу дату публикации материала не стандартными средствами Joomla 3, а использую для этих целей собственный код, то выглядит все это дело следующим образом:
<?php echo JText::sprintf(JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); /*Выводим на страницу дату публикации в формате ДД.Месяц.ГГ*/ ?>
Все что необходимо сделать, это обернуть данный код специальным тегом, чтобы получился следующий результат:
<time datetime="<?php echo ($this->item ->publish_up); /*Показываем точную дату публикации с точностью до секунды (для микроразметки)*/?>" itemprop="datePublished"> <?php echo JText::sprintf(JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); /*Выводим на страницу дату публикации в формате ДД.Месяц.ГГ*/ ?> </time>
Для микроразметки даты модификации можно поступить аналогичным образом (причем выводить саму дату на страницу не обязательно):
<time datetime="<?php echo ($this->item ->modified); /*Показываем точную дату модификации*/?>" itemprop="dateModified"></time>
Поля author и publisher
Что касается автора, можно пойти простым путем и указать одного автора для всех материалов, а можно выдергивать автора из базы данных, зная его идентификатор и выводить в нужном месте страницы. Я не стал заморачиваться и вывел автора статически, причем скрыл его с глаз при помощи стилей:
<div itemprop="author" itemscope itemtype="http://schema.org/Person" style="position: absolute;left: -9999px;"> <span itemprop="name">Joom4all.ru</span> </div>
Поле publisher можно дословно перевести как издатель, это можно сказать отдельный объект который относится к библиотеке «schema.org/Organization». Состав данного поля достаточно сложный, как выяснилось, издатель должен иметь адрес, телефон, имя, а так же логотип компании. Кроме того логотип относится уже к библиотеке «schema.org/ImageObject» и в качестве параметров должен содержать путь до изображения, а так же его ширину и высоту.
В моем случае я оформил поле publisher следующим образом, а для того чтобы логотип издателя не отображался на экране я скрыл его при помощи свойства display:none.
<div itemprop="publisher" itemscope itemtype="https://schema.org/Organization"> <div itemprop="logo" itemscope itemtype="https://schema.org/ImageObject"> <img itemprop="url image" src="/templates/joom4all/images/logo-min.png" style="display:none;"/> <meta itemprop="width" content="230"> <meta itemprop="height" content="109"> </div> <meta itemprop="name" content="Joom4all.ru"> <meta itemprop="address" content="Москва"> <meta itemprop="telephone" content="+7 999 000–00–00"> </div>
Поле mainEntityOfPage
И последнее поле, которое следует поправить это поле mainEntityOfPage. Данное поле относится к библиотеке schema.org/WebPage и не является обязательным, если честно, какова его суть понять сложно. Но насколько мне удалось выяснить, суть его заключается в том, чтобы указать какая из страниц будет главной для текущего материала. Возможно, если у Вас на сайте материалы связаны друг с другом и четко прослеживается между ними связь, то данное поле будет полезно. Раз уж Гугл просит, то давайте его добавим.
У меня связи между материалами по большому счету никакой нет, поэтому в качестве значения для поля mainEntityOfPage я решил указать адрес текущей страницы. Сделал я это следующим образом:
<meta itemscope itemprop="mainEntityOfPage" itemType="https://schema.org/WebPage" itemid="<?php $shemaURL = &JFactory::getURI(); print $shemaURL; ?>" content="<?php echo $this->escape($this->item->title); ?>"/>
После проделанной работы стоит посмотреть, что на все это скажет валидатор микроразметки. Для начала запускаем тест в Гугле, результат радует, микроразметка присутствует, ошибки отсутствуют:
Теперь запускаем тот же самый тест в Яндексе, в принципе все хорошо, но есть одно предупреждение, которое гласит что поле interactionCount не определено в спецификации https://schema.org/Article:
Поле interactionCount изначально предполагало передачу данных о количестве просмотров статьи, но с некоторых пор оно устарело и для объекта Article (статья) данное поле действительно не определено. Однако Google к нему относится вполне положительно, по крайней мере, пока.
Оставлять данный параметр или нет дело сугубо личное, я все же решил от него избавиться, для этого в коде страницы я удалил мета тег с данным параметром и оставил лишь код, отвечающий за вывод количества просмотров, лишним не будет. После очередной проверки ошибок как в Яндексе, так и в Google замечено не было.
Что еще можно обозначить в статье при помощи семантической разметки? Как вариант можно отметить количество комментариев. Для этих целей предусмотрено специальное свойство «commentCount», в качестве параметра которому необходимо передать целое число количества комментариев.
Для начала нам необходимо получить то само число количества комментариев, как его получить я говорил в одной из предыдущих статей. После этого останется лишь добавить следующий мета тег <meta itemprop="commentCount" content="<? echo $count; ?>" />. Для тех кому лениво переходить по ссылке приведу свой код вывода количества комментариев с использованием вышеупомянутого мета тега:
<? /*Начало*/ $comments = JPATH_SITE . '/components/com_jcomments/jcomments.php'; /*Выводим количество комментариев, для этого используем функционал компонента jcomments*/ if (file_exists($comments)) {/*Проверяем наличие файла jcomments.php*/ require_once($comments); $options = array(); /*Массив условий для получения списка комментариев*/ $options['object_id'] = $this->item->id; /*Идентификатор материала, у которого будут проверяться наличие и количество комментариев*/ $options['object_group'] = 'com_content'; /*Имя компонента, в нашем случае это контент*/ $options['published'] = 1; $count = JCommentsModel::getCommentsCount($options);/*Используем статический метод с массивом условий для получения списка комментариев*/?> <div class="comment-hits" title="Количество комментариев"><?/*Количество Комментариев*/?> <span class="icon-comment" id="article-bottom" aria-hidden="true"></span> <meta itemprop="commentCount" content="<? echo $count; ?>" /> <? echo $count; ?> </div> <?}
Конечно, это далеко не весь возможный перечень элементов микроразметки для статьи, но этого вполне достаточно ведь в Joomla 3.8 основные элементы страниц уже размечены, а нам остается лишь подправить некоторые недочеты. На этом статья на тему микроразметки материалов в Joomla 3 подошла к концу, все интересующие Вас вопросы можете оставлять в комментариях.